//package com.flower.practice.config.redis;
//
//import com.fasterxml.jackson.annotation.JsonAutoDetect;
//import com.fasterxml.jackson.annotation.JsonTypeInfo;
//import com.fasterxml.jackson.annotation.PropertyAccessor;
//import com.fasterxml.jackson.databind.DeserializationFeature;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.redis.connection.RedisConnectionFactory;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
//import org.springframework.data.redis.serializer.RedisSerializer;
//import org.springframework.data.redis.serializer.StringRedisSerializer;
//
///**
// * @author lavender
// * @version 1.0
// * @date 2024-07-16 16:43
// * Redis的配置类
// */
//@Configuration
//public class RedisConfig {
//
//
//    /**
//     * 配置RedisTemplate，用于操作Redis数据库。
//     * 通过此方法，我们可以定制RedisTemplate的序列化方式和其他配置，以适应我们的应用程序需求。
//     *
//     * @param connectionFactory Redis连接工厂，用于创建Redis连接。
//     * @return RedisTemplate实例，配置了字符串序列化和JSON序列化。
//     */
//    @Bean
//    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
//        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
//        // 使用StringRedisSerializer作为键的序列化方式
//        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
//        // 配置Redis连接工厂
//        redisTemplate.setConnectionFactory(connectionFactory);
//        // 设置键的序列化方式为StringRedisSerializer
//        // redis序列化方案
//        redisTemplate.setKeySerializer(stringSerializer);
//        // 设置哈希键的序列化方式为StringRedisSerializer
//        redisTemplate.setHashKeySerializer(stringSerializer);
//        // 设置值的序列化方式为Jackson2JsonRedisSerializer，支持JSON格式的序列化和反序列化
//        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
//        // 设置哈希值的序列化方式为Jackson2JsonRedisSerializer
//        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer());
//        return redisTemplate;
//    }
//
//
//
//    /**
//     * 创建一个Jackson2JsonRedisSerializer实例，用于序列化和反序列化Redis中的JSON数据。
//     *
//     * @return Jackson2JsonRedisSerializer实例，配置了ObjectMapper以支持更广泛的JSON数据处理。
//     */
//    private Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
//        // 创建Jackson2JsonRedisSerializer实例，指定序列化对象的类型为Object。
//        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
//
//        // 创建并配置ObjectMapper，以设置JSON序列化和反序列化的属性。
//        ObjectMapper objectMapper = new ObjectMapper();
//        // 设置所有属性的访问权限，确保能够序列化和反序列化所有字段。
//        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//        // 配置ObjectMapper，在遇到未知属性时不会抛出异常，而是忽略这些属性。
//        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//        // 启用默认类型标记，使得反序列化时可以处理泛型和继承关系。
//        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
//
//        // 将配置后的ObjectMapper设置到Jackson2JsonRedisSerializer中。
//        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
//
//        return jackson2JsonRedisSerializer;
//    }
//
//}
